mkshort: obey bounds on empty (!) input.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 31 Aug 2005 13:27:28 +0000 (13:27 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 31 Aug 2005 13:27:28 +0000 (13:27 +0000)
csv: Don't use ampm flag if none given.

gpsbabel/csv_util.c
gpsbabel/internal_styles.c
gpsbabel/mkshort.c

index 66d7282183b44b4b43abc5797e16c5117662b8bb..b7be5ae40c70690c7fc5d80b8466ca7c9bdaae57 100644 (file)
@@ -662,10 +662,17 @@ addhms( const char *s, const char *format )
        int  min  =0;
        int  sec  =0;
        char * ampm = NULL;
+       int ac;
        
        ampm = xmalloc( strlen(s) );
-       if (sscanf(s, format, &hour, &min, &sec, ampm))
+       ac = sscanf(s, format, &hour, &min, &sec, &ampm);
+       /* If no time format in arg string, assume AM */
+       if (ac < 4) {
+               ampm[0] = 0; 
+       }
+       if (ac) {
           tt = ((tolower(ampm[0])=='P')?43200:0)+3600*hour+60*min+sec;
+       }
        xfree(ampm);
        
        return tt;
index 269b025373f058bfad43261af8f55cb0895c9d44..4093cc952bf6e1da11457e08e3d3d2e5624fb8ef 100644 (file)
@@ -180,6 +180,42 @@ static char fugawi[] =
 "IFIELD  GMT_TIME, \"\", \"%Y%m%d\"\n"
 "IFIELD  HMSG_TIME, \"\", \"%02d%02d%02d\"\n"
 ;
+static char garmin301[] = 
+"# gpsbabel XCSV style file\n"
+"#\n"
+"# Format: Garmin 301 Position + Heartrate data\n"
+"# Author: Jeff Kalikstein\n"
+"#   Date: 08/29/2005\n"
+"#\n"
+
+"DESCRIPTION           Garmin 301 Custom position and heartrate\n"
+
+"# FILE LAYOUT DEFINITIIONS:\n"
+"#\n"
+"FIELD_DELIMITER               COMMA\n"
+"RECORD_DELIMITER      NEWLINE\n"
+"BADCHARS              COMMA\n"
+"#FORMAT_TYPE          INTERNAL\n"
+
+"#\n"
+"# HEADER STUFF:\n"
+"#\n"
+"PROLOGUE      Garmin 301 data __FILE__ \n"
+"PROLOGUE      Timestamp,Latitude, Longitude, Atlitude(ft), heart rate\n"
+"#\n"
+"# INDIVIDUAL DATA FIELDS:\n"
+"#\n"
+"IFIELD        TIMET_TIME,\"\",\"%ld\"\n"
+"IFIELD        LAT_DECIMAL, \"\", \"%f\"\n"
+"IFIELD        LON_DECIMAL, \"\", \"%f\"\n"
+"IFIELD        ALT_FEET, \"\", \"%fF\"\n"
+"IFIELD  HEART_RATE,\"\",\" %d\"       # beats per minute\n"
+
+
+"# EPILOGUE: \n"
+"#EPILOGUE     Epilogue Line 1\n"
+"#EPILOGUE     Epilogue Line 2\n"
+;
 static char gpsdrive[] = 
 "# gpsbabel XCSV style file\n"
 "#\n"
@@ -650,5 +686,5 @@ static char xmapwpt[] =
 "IFIELD        DESCRIPTION, \"\", \"%-.78s\"\n"
 ;
 #include "defs.h"
-style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap", xmap } , { "tabsep", tabsep } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "csv", csv } , { "arc", arc } ,  {0,0}};
-size_t nstyles = 17;
+style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap", xmap } , { "tabsep", tabsep } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "csv", csv } , { "arc", arc } ,  {0,0}};
+size_t nstyles = 18;
index b670d31d9a10b568b277089288e31583029cc232..db5e0a45d4ee84ca32370020ad8d9d131369fb17 100644 (file)
@@ -372,7 +372,7 @@ mkshort(void *h, const char *istring)
         * Walk in the Woods 2.
         */
        np = ostring + strlen(ostring);
-       while (*(np-1) && isdigit(*(np-1) )) {
+       while ((np != ostring) && *(np-1) && isdigit(*(np-1) )) {
                np--;
        }
        if (np) {